package br.com.damazzy.util {
	
	import mx.controls.Alert;
	
	/**
	 * Classe que contém os métodos utilitários relacionados à reflection.
	 * 
	 * @author Bancoob
	 */
	public class ReflectionUtils {
		
//**********
// Serviços:
//**********

		/**
		 * Recupera uma propriedade do objeto informado, levando em consideração
		 * os pontos para indicar níveis.
		 *
		 * @param objeto o objeto cuja propriedade será recuperada.
		 * @param propriedade o nome da propriedade.
		 * @return o valor da propriedade, ou nulo, caso ela não exista ou 
		 * realmente seja nula.
		 */
		public static function recuperarPropriedade(objeto:Object, 
				propriedade:String):Object {
			var valor:Object = objeto;
			var propriedades:Array = null;

			if (valor == null || propriedade == null 
					|| propriedade.length == 0) {
				return null;
			}
			
			if (objeto.hasOwnProperty(propriedade)) {
				return objeto[propriedade];
			}

			propriedades = (propriedade.indexOf(".")) >= 0 ?  propriedade.split(".") : [propriedade];

			for (var i:int = 0; i < propriedades.length; i++) {
				
				if (!valor.hasOwnProperty(propriedades[i])) {
					valor = null;
					break;
				}
				
				valor = valor[propriedades[i]];

				if (valor == null) {
					break;
				}
			}

			return valor;
		}
	}
}
